/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 *
 * @author thiago
 */
@Entity
@Table(name = "Cotacao")
public class Cotacao implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    private long idCotacao;
    private long numeroCotacao;
    @ManyToOne
    private Usuario criadoPor;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataCriacao;
    private String horaCriacao;
    @ManyToOne
    private Usuario modificadoPor;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataModificacao;
    private String horaModificacao;
    private CondicaoPagamento condicaoPagamento;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date prazoEntrega;
    private String tipoFrete;
    private Status status;
    private long idMoeda;
    @ManyToMany(fetch = FetchType.EAGER)
	@Fetch(FetchMode.SUBSELECT)
	private List<ItemCotacao> itemCotacao;  
    @ManyToOne(fetch = FetchType.EAGER)
    private SolicitacaoCotacao solicitacao;
    private Double valorFrete;
    private String justificativa;
    @ManyToOne(fetch = FetchType.EAGER)
    private Fornecedor fornecedor;
    
    public Cotacao() {
        
    }

    public Cotacao(long idCotacao, long numeroCotacao,
            Usuario criadoPor,
            Date dataCriacao,
            String horaCriacao,
            Usuario modificadoPor,
            Date dataModificacao,
            String horaModificacao,
            CondicaoPagamento condicaoPagamento,
            Date prazoEntrega,
            String tipoFrete,
            Status status,
            long idMoeda,
            List<ItemCotacao> itemCotacao,
            SolicitacaoCotacao solicitacao,
            Double valorFrete,
            String justificativa,
            Fornecedor fornecedor) {

        this.idCotacao = idCotacao;
        this.numeroCotacao = numeroCotacao;
        this.criadoPor = criadoPor;
        this.dataCriacao = dataCriacao;
        this.horaCriacao = horaCriacao;
        this.modificadoPor = modificadoPor;
        this.dataModificacao = dataModificacao;
        this.horaModificacao = horaModificacao;
        this.condicaoPagamento = condicaoPagamento;
        this.prazoEntrega = prazoEntrega;
        this.tipoFrete = tipoFrete;
        this.status = status;
        this.idMoeda = idMoeda;
        this.itemCotacao = itemCotacao;
        this.solicitacao = solicitacao;
        this.valorFrete = valorFrete;
        this.justificativa = justificativa;
        this.fornecedor = fornecedor;
    }

    public CondicaoPagamento getCondicaoPagamento() {
        return condicaoPagamento;
    }

    public void setCondicaoPagamento(CondicaoPagamento condicaoPagamento) {
        this.condicaoPagamento = condicaoPagamento;
    }

    public Usuario getCriadoPor() {
        return criadoPor;
    }

    public void setCriadoPor(Usuario criadoPor) {
        this.criadoPor = criadoPor;
    }

    public Date getDataCriacao() {
        return dataCriacao;
    }

    public void setDataCriacao(Date dataCriacao) {
        this.dataCriacao = dataCriacao;
    }

    public Date getDataModificacao() {
        return dataModificacao;
    }

    public void setDataModificacao(Date dataModificacao) {
        this.dataModificacao = dataModificacao;
    }

    public String getHoraCriacao() {
        return horaCriacao;
    }

    public void setHoraCriacao(String horaCriacao) {
        this.horaCriacao = horaCriacao;
    }

    public String getHoraModificacao() {
        return horaModificacao;
    }

    public void setHoraModificacao(String horaModificacao) {
        this.horaModificacao = horaModificacao;
    }

    public Usuario getModificadoPor() {
        return modificadoPor;
    }

    public void setModificadoPor(Usuario modificadoPor) {
        this.modificadoPor = modificadoPor;
    }

    public long getNumeroCotacao() {
        return numeroCotacao;
    }

    public void setNumeroCotacao(long numeroCotacao) {
        this.numeroCotacao = numeroCotacao;
    }

    public Date getPrazoEntrega() {
        return prazoEntrega;
    }

    public void setPrazoEntrega(Date prazoEntrega) {
        this.prazoEntrega = prazoEntrega;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public String getTipoFrete() {
        return tipoFrete;
    }

    public void setTipoFrete(String tipoFrete) {
        this.tipoFrete = tipoFrete;
    }

	public long getIdCotacao() {
		return idCotacao;
	}

	public void setIdCotacao(long idCotacao) {
		this.idCotacao = idCotacao;
	}

	public long getIdMoeda() {
		return idMoeda;
	}

	public void setIdMoeda(long idMoeda) {
		this.idMoeda = idMoeda;
	}

	public List<ItemCotacao> getItemCotacao() {
		return itemCotacao;
	}

	public void setItemCotacao(List<ItemCotacao> itemCotacao) {
		this.itemCotacao = itemCotacao;
	}		
	
	public SolicitacaoCotacao getSolicitacao() {
		return solicitacao;
	}

	public void setSolicitacao(SolicitacaoCotacao solicitacao) {
		this.solicitacao = solicitacao;
	}

	public Double getValorFrete() {
		return valorFrete;
	}

	public void setValorFrete(Double valorFrete) {
		this.valorFrete = valorFrete;
	}
	
	public String getJustificativa() {
		return justificativa;
	}

	public void setJustificativa(String justificativa) {
		this.justificativa = justificativa;
	}	
	
	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (idCotacao ^ (idCotacao >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cotacao other = (Cotacao) obj;
		if (idCotacao != other.idCotacao)
			return false;
		return true;
	}    
	
}
